
package com.module.app.utils;

import com.module.app.bean.SkinBean;
import com.module.app.bean.IType;
import com.module.app.bean.IType;
import com.module.app.bean.SkinBean;
import com.module.base.cache.CacheSDK;
import com.google.gson.reflect.TypeToken;
import com.module.skin.SkinUtils;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

/**
 * MySkinUtils
 * 主要用于存储SkinBean的实体信息，
 * 根据具体实体信息判断是否取消当前的主题
 */
public class MySkinUtils {

    public static boolean isBg() {
        try {
            SkinBean cur = getCurSkinBean();
            if (cur == null || !cur.isBg() || AutoSkinNightUtils.isNight()) {
                return false;
            }
            //SD卡皮肤，还需要判断路径是否存在
            if (cur.isSD()) {
                File file = new File(FileUtils.getSkinPath(), cur.getSkinName() + ".skin");
                if (cur.isBg() && file != null && file.exists()) {
                    return true;
                }
            }
            return false;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 检查皮肤
     */
    public static void checkSkin() {
        boolean restore = false;
        try {
            SkinBean cur = getCurSkinBean();
            if (cur == null) {
                restore = true;
            }
            if (cur.isSD()) {
                //SD卡皮肤
                File file = new File(FileUtils.getSkinPath(), cur.getSkinName() + ".skin");
                if (file == null || !file.exists()) {
                    //路径不存在
                    restore = true;
                }
            } else {
                //应用内皮肤
                //判断是否有在使用
                if (!SkinUtils.INSTANCE.isUse(cur.getSkinName())) {
                    restore = true;
                }
            }
            //恢复默认
            if (restore) {
                SkinUtils.INSTANCE.restore();
                saveCurSkinBean(null);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 保存当前皮肤
     */
    public static void saveCurSkinBean(Object object) {
        String json = null;
        if (object != null) {
            json = GsonUtils.toJson(object);
        }
        CacheSDK.put(IType.ICache.SKIN, json);
    }

    /**
     * 获取当前皮肤
     */
    public static SkinBean getCurSkinBean() {
        try {
            String json = CacheSDK.get(IType.ICache.SKIN, String.class);
            return GsonUtils.fromJson(json, SkinBean.class);
        } catch (Exception e) {
            return null;
        }
    }


    /**
     * 获取SD卡皮肤下载的列表
     */
    private static Map<String, SkinBean> getSDMap() {
        Map<String, SkinBean> map = null;
        try {
            String json = CacheSDK.get(IType.ICache.SKIN_SD, String.class);
            map = GsonUtils.fromJson(json, new TypeToken<Map<String, SkinBean>>() {
            }.getType());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }

    private static void saveSDMap(Map<String, SkinBean> map) {
        CacheSDK.put(IType.ICache.SKIN_SD, GsonUtils.toJson(map));
    }

    /**
     * 下载完成后，添加SK皮肤
     */
    public static void addSDSkin(SkinBean bean) {
        if (bean == null) {
            return;
        }
        if (!bean.isSD()) {
            return;
        }
        Map<String, SkinBean> map = getSDMap();
        if (map == null) {
            map = new HashMap<>();
        }
        //存在替换，不存在添加
        map.put(bean.getSkinName(), bean);
        //保存数据
        saveSDMap(map);
    }

    /**
     * 判断当前皮肤是否要下载
     */
    public static boolean isDownload(SkinBean bean) {
        if (bean == null) {
            return false;
        }
        if (!bean.isSD()) {
            return false;
        }
        //判断实际的SD路径是否存在
        File file = new File(FileUtils.getSkinPath(), bean.getSkinName() + ".skin");
        if (!file.exists()) {
            //实际路径不存在,则需要下载
            return true;
        }
        Map<String, SkinBean> map = getSDMap();
        if (map == null || !map.containsKey(bean.getSkinName())) {
            //不存在，则需要下载
            return true;
        }
        //存在，判断版本号
        SkinBean skin = map.get(bean.getSkinName());
        if (skin.getVersion() < bean.getVersion()) {
            //版本号小于最新版本，需要更新，则下载
            return true;
        }
        return false;
    }

    /**
     * 是否含有夜间主要
     */
    public static boolean isNight() {
        Map<String, SkinBean> map = getSDMap();
        if (map != null && map.containsKey("skin_night")) {
            return !isDownload(map.get("skin_night"));
        }
        return false;
    }

    /**
     * 是否需要更新
     *
     * @return 本地存在数据，且版本号不是最新
     */
    public static boolean isUpdate(SkinBean bean) {
        if (bean == null) {
            return false;
        }
        if (!bean.isSD()) {
            return false;
        }
        //判断实际的SD路径是否存在
        File file = new File(FileUtils.getSkinPath(), bean.getSkinName() + ".skin");
        if (!file.exists()) {
            //实际路径不存在,不需要更新
            return false;
        }
        Map<String, SkinBean> map = getSDMap();
        if (map == null || !map.containsKey(bean.getSkinName())) {
            //不存在,不需要更新
            return false;
        }
        //存在，判断版本号
        SkinBean skin = map.get(bean.getSkinName());
        if (skin.getVersion() < bean.getVersion()) {
            //版本号小于最新版本，需要更新
            return true;
        }
        return false;

    }


    /**
     * 获取背景url
     */
    public static String getBgUrl() {
        try {
            return getCurSkinBean().getBgUrl();
        } catch (Exception e) {
            return null;
        }
    }
}
